﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using InterfaceXAML.ExaPlanningService;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

// The Basic Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234237

namespace InterfaceXAML
{
    /// <summary>
    /// A basic page that provides characteristics common to most applications.
    /// </summary>
    public sealed partial class InscriptionPage : InterfaceXAML.Common.LayoutAwarePage
    {

        public InscriptionPage()
        {
            this.InitializeComponent();

            
        }

        protected async override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            var locations = await App.ExaPlanningServiceClient.GetAllLocationAsync();
            var activities = await App.ExaPlanningServiceClient.GetAllActivityAsync();
            var jobs = await App.ExaPlanningServiceClient.GetAllJobAsync();

            DataContext = new { Location = locations, Activity = activities, Job = jobs };
        }



        /// <summary>
        /// Populates the page with content passed during navigation.  Any saved state is also
        /// provided when recreating a page from a prior session.
        /// </summary>
        /// <param name="navigationParameter">The parameter value passed to
        /// <see cref="Frame.Navigate(Type, Object)"/> when this page was initially requested.
        /// </param>
        /// <param name="pageState">A dictionary of state preserved by this page during an earlier
        /// session.  This will be null the first time a page is visited.</param>
        protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
        {
        }

        /// <summary>
        /// Preserves state associated with this page in case the application is suspended or the
        /// page is discarded from the navigation cache.  Values must conform to the serialization
        /// requirements of <see cref="SuspensionManager.SessionState"/>.
        /// </summary>
        /// <param name="pageState">An empty dictionary to be populated with serializable state.</param>
        protected override void SaveState(Dictionary<String, Object> pageState)
        {
        }

        private void BackButtonClick(object sender, RoutedEventArgs e)
        {
            if(Frame.CanGoBack)
                Frame.GoBack();
        }

        private void InscriptionClick(object sender, RoutedEventArgs args)
        {
            var login = String.Empty;
            var password = Password.Password;
            var passwordConfirm = PasswordConfirm.Password;
            var name = String.Empty;
            var firstName = String.Empty;
            var mail = String.Empty;
            var phone = String.Empty;

            var indexLocation = Location.SelectedIndex;
            var indexActivity = Activity.SelectedIndex;
            var indexJob = Job.SelectedIndex;
            int location = 0;
            int activity = 0;
            int job = 0;

            Login.Document.GetText(Windows.UI.Text.TextGetOptions.NoHidden, out login);
            Name.Document.GetText(Windows.UI.Text.TextGetOptions.NoHidden, out name);
            FirstName.Document.GetText(Windows.UI.Text.TextGetOptions.NoHidden, out firstName);
            Email.Document.GetText(Windows.UI.Text.TextGetOptions.NoHidden, out mail);
            Phone.Document.GetText(Windows.UI.Text.TextGetOptions.NoHidden, out phone);

            Login.BorderBrush = Application.Current.Resources["CorrectField"] as SolidColorBrush;
            Password.BorderBrush = Application.Current.Resources["CorrectField"] as SolidColorBrush;
            PasswordConfirm.BorderBrush = Application.Current.Resources["CorrectField"] as SolidColorBrush;
            Name.BorderBrush = Application.Current.Resources["CorrectField"] as SolidColorBrush;
            FirstName.BorderBrush = Application.Current.Resources["CorrectField"] as SolidColorBrush;
            Email.BorderBrush = Application.Current.Resources["CorrectField"] as SolidColorBrush;
            Phone.BorderBrush = Application.Current.Resources["CorrectField"] as SolidColorBrush;
            Location.DisplayNormal();
            Activity.DisplayNormal();
            Job.DisplayNormal();

            if(String.IsNullOrWhiteSpace(login))
                Login.BorderBrush = Application.Current.Resources["ErrorField"] as SolidColorBrush;

            if(String.IsNullOrWhiteSpace(password))
                Password.BorderBrush = Application.Current.Resources["ErrorField"] as SolidColorBrush;

            if (String.IsNullOrWhiteSpace(passwordConfirm) || !password.Equals(passwordConfirm))
                PasswordConfirm.BorderBrush = Application.Current.Resources["ErrorField"] as SolidColorBrush;

            if (String.IsNullOrWhiteSpace(name))
                Name.BorderBrush = Application.Current.Resources["ErrorField"] as SolidColorBrush;

            if (String.IsNullOrWhiteSpace(firstName))
                FirstName.BorderBrush = Application.Current.Resources["ErrorField"] as SolidColorBrush;

            if (String.IsNullOrWhiteSpace(mail))
                Email.BorderBrush = Application.Current.Resources["ErrorField"] as SolidColorBrush;

            if (String.IsNullOrWhiteSpace(phone))
                Phone.BorderBrush = Application.Current.Resources["ErrorField"] as SolidColorBrush;

            if (indexLocation == -1)
                Location.DisplayError();
            location = (Location.SelectItem as LocationViewModel).ID;

            if(indexActivity == -1)
                Activity.DisplayError();
            activity = (Activity.SelectItem as ActivityViewModel).ID;

            if(indexJob == -1)
                Job.DisplayError();
            job = (Job.SelectItem as JobViewModel).ID;

            // Appel au WebService
            try
            {
                App.ExaPlanningServiceClient.RegisterAsync(login, password, name, firstName, phone, mail, job, location, activity);
            }
            catch (Exception e)
            {

            }
        }
    }
}
